function modulated_signal = tdma_modulate(frame_bits, M)
% tdma_modulate - 对TDMA帧中的比特进行调制
%
% 输入参数:
%   frame_bits - 一帧内的比特序列
%   M         - 调制阶数 (默认为2，类似于GMSK调制)
%
% 输出参数:
%   modulated_signal - 调制后的信号

% 在GSM(2G)系统中，主要使用GMSK(高斯最小频移键控)调制
% 这里我们使用简化的调制方式，实际GMSK更为复杂

% 参数设置
samples_per_bit = 8;  % 每比特采样点数
BT = 0.3;            % 带宽时间积 (GSM标准为0.3)
pulse_length = 4;    % 高斯脉冲长度（符号数）

% 构造发送比特序列
bits = frame_bits;

% NRZ编码(0->-1, 1->1)
nrz_bits = 2*bits - 1;

% 上采样
upsampled = upsample(nrz_bits, samples_per_bit);

% 创建高斯滤波器
N = pulse_length * samples_per_bit;
alpha = sqrt(log(2))/(2*pi*BT);
time_idx = (-N/2:N/2-1)/(samples_per_bit);
h_gaussian = (1/(sqrt(2*pi)*alpha)) * exp(-(time_idx.^2)/(2*alpha^2));
h_gaussian = h_gaussian / sum(h_gaussian);  % 归一化

% 应用高斯滤波器得到平滑的脉冲
filtered_signal = filter(h_gaussian, 1, upsampled);

% 对于GMSK，相位是比特积分的结果
% 计算相位 (积分滤波后的信号)
phase = cumsum(filtered_signal) * pi/2 / samples_per_bit;

% 生成GMSK信号
modulated_signal = exp(1i * phase);

% 添加一些随机相位噪声和幅度波动来模拟实际信道效应
phase_noise = 0.01 * randn(size(modulated_signal));
amplitude_fluctuation = 1 + 0.05 * randn(size(modulated_signal));
modulated_signal = amplitude_fluctuation .* modulated_signal .* exp(1i * phase_noise);

end 